package com.boguan.device.service;

import com.boguan.common.core.domain.entity.SysUser;
import com.boguan.device.domain.DeviceAlarmLog;
import com.boguan.device.domain.DeviceLog;
import com.boguan.device.domain.vo.DeviceDetailAlarmVo;

import java.util.List;
import java.util.Map;

/**
 * 设备报警信息处理逻辑 类
 *
 * @author chen
 */
public interface IDeviceAlarmService {


    /**
     * 查询出报警信息
     *
     * @param alarmLog
     * @return
     */
    List<DeviceAlarmLog> alarmMessage(DeviceAlarmLog alarmLog);

    /**
     * 查询出设备报警信息详情
     *
     * @param id
     * @return
     */
    DeviceAlarmLog alarmMessageDetails(Long id);

    /**
     * 处理报警信息
     *
     * @param alarmLog
     * @return
     */
    int updateByPrimaryKeySelective(DeviceAlarmLog alarmLog);

    /**
     * 查询出故障信息
     *
     * @param deviceLog
     * @return
     */
    List<DeviceLog> faultMessage(DeviceLog deviceLog);

    /**
     * 查询出故障信息详情
     *
     * @param id
     * @return
     */
    DeviceLog faultMessageDetails(Long id);

    /**
     * 预警数量，严重预警数量，告警数量，未处理数量
     *
     * @param user
     * @return
     */
    Map<String, Integer> alarmNumber(SysUser user);

    /**
     * 报警数量分析
     *
     * @param user
     * @return
     */
    List<Map<String, Object>> analysisAlarmNumber(SysUser user);

    /**
     * 根据区域id查询出报警数量，已处理数量，未处理数量
     *
     * @param user
     * @return
     */
    Integer selectAlarmCount(SysUser user);


    /**
     * 根据区域id查询出报警数量，已处理数量，未处理数量
     *
     * @param user
     * @return
     */
    List<Map<String, Integer>> untreatedAlarmCount(SysUser user);

    /**
     * 报警数量趋势 只查询本月的
     *
     * @param user
     * @return
     */
    List<Map<String, Object>> alarmCountTrend(SysUser user);

    /**
     * 查询出报警/预警/严重预警的数量
     *
     * @param user
     * @return
     */
    List<Map<String, Integer>> alarmLevelCount(SysUser user);

    /**
     * @param deviceId
     * @param eventName
     * @return
     */
    DeviceAlarmLog selectAlarmByError(Long deviceId, String eventName, Integer errorStatus, Integer status);

    /**
     * 保存报警信息
     *
     * @param deviceAlarmLogs
     * @return
     */
    int insertSelective(DeviceAlarmLog deviceAlarmLogs);

    /**
     * 删除报警
     *
     * @param id
     * @return
     */
    int deleteAlarm(Long id);

    /**
     * 查询出设备是否存在报警的数量 ，排除设备上下线
     *
     * @param deviceId
     * @return
     */
    int selectAlarmCountByDeviceId(Long deviceId, String identifier);


     List<DeviceDetailAlarmVo> deviceAlarmManage(String deviceNo);

    List<DeviceDetailAlarmVo> deviceAlarmManageDetail(String deviceId,String alarmTime);

     List<DeviceDetailAlarmVo> deviceAlarmSearch(String device_num,String device_name, String status);
}
